package web_hr;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Sign
 */
@WebServlet("/Sign")
public class Sign extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Sign() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		Date date = new Date();
		Model time=new Model("hr_time");
		
		//session 在当前会话中有效，session是通过HttpSession接口实现的,注意session中没有getParameter()方法 。 
		String name = (String)request.getSession().getAttribute("username");
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd");
		//查询当天记录是否存在,即用来判断员工当天有没有签到
		String search = "select id,sta,end from hr_time where sta between to_date('"+sdfd.format(date)+" 00:00:00','YYYY-MM-DD HH24:MI:SS') and to_date('"+sdfd.format(date)+" 23:59:59','YYYY-MM-DD HH24:MI:SS') and username='"+name+"'";
		System.out.println(search);
		ResultSet rs = time.eQuery(search);
		int id=0;
		PrintWriter pw = response.getWriter();
		//0 represent sta not exsit,1 represent sta exist end not,2 represent end exist 
	
		//当登陆到emmployee页面时，从empHeader.jsp中的签到按钮中取得按钮的当前状态：
		// 0 代表 员工还没有开始签到，按钮显示“Sign in”状态；
		// 1 代表 员工已经签到，但没有签退，按钮显示“Sign out”状态；
		// 2  代表  员工 已经签到，并已经签退，按钮显示“Signed”状态；
		String sign = (String)request.getParameter("sign");
		System.out.println(sign);
		//载入界面
		/*
		 * 无签到按钮响应时的几种情况：
		 * 1.数据库中无当天签到记录，返回“0”到浏览器页面，即按钮显示“sign in”；
		 * 2.数据库有当天签到记录时，本次登录未签到，返回“0”，--按钮显示“sign in”；
		 *                   本次登录签到并签退，返回“2”，--按钮显示“signed”；
		 *                   本次登录签到未签退，返回“1”，--按钮显示“sign out”；
		 * */
		if(sign.equals("empty")){
			Date dsta = null;
			Date dend = null;
			try {
				if(rs.next()){
					try {
						id = rs.getInt(1);
						dsta = rs.getDate(2);
						dend = rs.getDate(3);
						System.out.println(id);
					} catch (SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
					//查看当天是否签到，如果签到sta不为空，即已经签过到。
					if(dsta!=null){
						//查询当天是否签退
						if(dend!=null){
							pw.print("2");
						}else{
							pw.print("1");
						}
					}else{
						pw.print("0");
					}
				}else{
					pw.print("0");
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		//当点击按钮时，如果点击按钮状态为“Sign in”时，即开始签到，那么就得向数据库中插入一条记录
		/*
		 * 按钮响应事件：
		 * 1.按钮为“sign_in”时，点击按钮，向数据库插入本次签到开始时间，并返回“3”到浏览器页面，按钮变为“sign_out”
		 * 2.按钮为“sign_out”时，点击按钮，向数据库插入本次签退时间，并返回“4”到浏览器页面，按钮变为“signed” 
		 * */
		else if(sign.equals("sign_in")){
			System.out.println("insett");
			String sql = "insert into hr_time(username,sta,time) values('"+name+"',to_date('"+sdf.format(date)+"','YYYY-MM-DD HH24:MI:SS'),0)";
			System.out.println(sql);
			pw.println("3");
			time.eQuery(sql);
		}
		//当点击按钮时，如果点击按钮状态为“Sign out”时，即开始签退，那么就得向数据库中插入end字段数据
		else if(sign.equals("sign_out")){
			try {
				rs.next();
				id = rs.getInt(1);
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			String sql1 = "update hr_time set end = to_date('"+sdf.format(date)+"','YYYY-MM-DD HH24:MI:SS') where id ='"+id+"'";	
			System.out.println(sql1);	
			System.out.println("werty counttime");	
			time.eQuery(sql1);
			pw.println("4");

			//当点击签退时，根据数据库中end 和 sta 差值  计算当天该员工工作的时间，单位为分钟；
			/*
			 * 从数据库获取签到及签退时间，计算本次登录时间，写入数据库作为工作时间
			 * */
            Date staring;
			Date ending;
			long daytime=0;
			//String counttime="select sta,end  from hr_time  where id ='21'";
			String counttime="select * from hr_time  where id ='"+id+"'";
			//String counttime="select to_char(sta,'yyyy-mm-dd hh24:mi:ss'),to_char(end,'yyyy-mm-dd hh24:mi:ss')  from hr_time  where id ='21'";
			System.out.println(counttime);
			ResultSet res=time.eQuery(counttime);
			if (res!=null)
			{
				System.out.println("sql correct");
				try {
					res.next();
					// ending=res.getDate("end");
					ending= res.getTime("end");
					 System.out.println(ending);
					staring=res.getTime("sta");
					System.out.println(staring);							
					//签到的时间差，单位为分钟；
				daytime=(ending.getTime()-staring.getTime())/(1000*60);	
				System.out.println(daytime);
					
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
			}
			String str1="update hr_time set time="+daytime+"where id='"+id+"'";
			ResultSet ress=time.eQuery(str1);
			if (ress!=null)
			{
				System.out.println("time sign  correct");
				
			}
			
		}
		time.close();
		}
	
	}






















